package com.xbongbong.paas.domain.dao;

import com.xbongbong.paas.domain.entity.PaasProcessDataEntity;
import com.xbongbong.pro.domain.entity.UpdateDataEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @author: wufeng
 * @date: 2018/11/19 14:04
 * @desrcption: 流程任务
 */
@Repository
@Mapper
public interface PaasProcessDataDao {


    /**
     * 插入
     * @param entity
     * @return
     */
    Integer insert(PaasProcessDataEntity entity);

    /**
     * 更新
     * @param paasApp
     * @return
     */
    Integer update(PaasProcessDataEntity paasApp);

    /**
     * 批量插入
     * @param entityList
     */
    void insertBatch(@Param("list") List<PaasProcessDataEntity> entityList);

    /**
     * 删除
     * @param key
     * @param corpid
     * @return
     */
    Integer deleteByKey(@Param("key") Integer key, @Param("corpid") String corpid);

    /**
     * 获取一条数据
     * @param key
     * @param corpid
     * @return
     */
    PaasProcessDataEntity getByKey(@Param("key") Integer key, @Param("corpid") String corpid);

    /**
     * 查询数据
     * @param param
     * @return
     */
    List<PaasProcessDataEntity>  findEntitys(@Param("param") Map<String, Object> param);

    /**
     * 获取数据总计
     * @param param
     * @return
     */
    Integer getEntitysCount(@Param("param") Map<String, Object> param);

    /**
     * 根据data里某个条件搜索
     *
     * @param dataParam   data里属性
     * @param param 参数
     */
    Integer getCountByCondition(@Param("dataParam") Map<String,Object> dataParam, @Param("param") Map<String,Object> param);

    /**
     * 查询单个实体
     * @param key
     * @param corpid
     * @return
     */
    PaasProcessDataEntity getByTaskId(@Param("taskId") Long key,@Param("corpid") String corpid);

    List<PaasProcessDataEntity> getInApprovalDataByIdCondition(@Param("param") Map<String,Object> param, @Param("attr") String attr,@Param("dataIdIn") List<Object> dataIdIn);

    void deleteByTaskId(@Param("taskId") Long taskId, @Param("corpid") String corpid);

    List<PaasProcessDataEntity> getInApprovalDataByCondition(@Param("param") Map<String,Object> param, @Param("attr") String attr, @Param("value") String value);

    List<PaasProcessDataEntity> getInApprovalDataByLikeCondition(@Param("param") Map<String,Object> param, @Param("attr") String attr, @Param("value") String value);

    List<PaasProcessDataEntity> getInApprovalData(@Param("param") Map<String,Object> param, @Param("attr") String attr, @Param("value") String value);

    /**
     * 批量插入
     * @param entityList
     */
    void updateBatch(@Param("list") List<PaasProcessDataEntity> entityList, @Param("corpid") String corpid);

    /**
     * 更新数据
     * @param entityList 更新的数据
     * @param corpid 公司id
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    void updateBatchForAll(@Param("list") List<PaasProcessDataEntity> entityList, @Param("corpid") String corpid);

    void updateBatchForData(@Param("list") List<UpdateDataEntity> updateDataList, @Param("corpid") String corpid);


    /**
     * 仅用于资金管理第一期上线脚本,查询公司所有的审批记录
     * @param corpid
     * @return
     */
    List<PaasProcessDataEntity> getAllData(@Param("corpid") String corpid,@Param("del") Integer del);

    List<PaasProcessDataEntity> getInApprovalDataByIdConditionJsonArray(@Param("param") Map<String,Object> param, @Param("attr") String attr,@Param("dataIdIn") List<Object> dataIdIn);

    List<PaasProcessDataEntity> getInvoiceInApprovalDataByIdConditionJsonArray(@Param("param") Map<String,Object> param, @Param("attr") String attr,@Param("dataIdIn") List<String> dataIdIn);

    List<PaasProcessDataEntity> getInApprovalDataByIdAndTypeCondition(@Param("param") Map<String,Object> param, @Param("attr") String attr,@Param("dataIdIn") List<Object> dataIdIn, @Param("type") String type, @Param("typeList") List<String> typeList);

    Integer updateInstockAndOutstockType(@Param("list")List<UpdateDataEntity> list);

    /**
     * 根据表单id删除数据
     * @param formId
     * @param corpid
     * @return
     */
    Integer deleteByFormId(@Param("formId") Long formId, @Param("corpid") String corpid);

    /**
     * 获取审批数据表某种业务类型的公司list，减少循环主体
     * @param businessType 业务类型
     * @return java.util.List<java.lang.String>
     * @author zcp
     * @since v1.0
     * @version v1.0
     */
    List<String> getCorpidList(@Param("businessType") Integer businessType);

    /**
     * 查询改资金账户ID下是否存在在审批中的回款单
     * @param corpid 公司ID
     * @param accountId 账户ID
     * @return 总数
     */
    Integer getByFundAccountIdInPaymentSheet(@Param("corpid") String corpid, @Param("accountId") Long accountId);

    /**
     * 查询改资金账户ID下是否存在在审批中的付款单
     * @param corpid 公司ID
     * @param accountId 账户ID
     * @return 总数
     */
    Integer getByFundAccountIdInPaySheet(@Param("corpid") String corpid, @Param("accountId") Long accountId);

    /**
     * 脚本SQL  用完删
     * @param param 参数
     * @return result
     */
    List<PaasProcessDataEntity> getScriptPaymentSheetData(@Param("param") Map<String, Object> param);

    /**
     * 脚本SQL  用完删
     * @return result
     */
    List<PaasProcessDataEntity> getScriptRefundPaymentSheetData();

    /**
     * 批量插入 脚本SQL  用完删
     * @param entityList
     */
    void updateBatchByScript(@Param("list") List<PaasProcessDataEntity> entityList);
    /**
     * 查询流程中是否含有不为空的数据
     * @param param
     * @return
     */
    List<PaasProcessDataEntity> hasDataInApproval(@Param("param") Map<String, Object> param);

    Integer hasLabelInApprovel(@Param("param")  Map<String, Object> param);

    Long countDataInApproval(@Param("param") Map<String, Object> param);

    List<PaasProcessDataEntity> hasDataInApprovalWithData(@Param("param") Map<String, Object> param);

    /**
     * 批量更新审批流程中的数据，资金三期用的迁移审批中的老数据
     *
     * @param subFormList
     * @return
     */
    Integer updateBatchProcessData(@Param("list") List<PaasProcessDataEntity> subFormList);

    /**
     * 获取审批表中的最大id
     *
     * @param processDataMap
     * @return
     */
    Long getMaxId(@Param("param") Map<String, Object> processDataMap);
}
